#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX 100

pthread_mutex_t mutex;
pthread_cond_t cond;
int i = 1;
int ready = 0; // 标记是否有新的可被线程2处理的值

void *thread1(void *arg)
{
    for (; i <= MAX; i++)
    {
        pthread_mutex_lock(&mutex);

        if (i % 9 == 0)
        {
            ready = 1;                  // 标记有新值可被线程2处理
            pthread_cond_signal(&cond); // 通知线程2
            // 等待线程2处理完当前值
            while (ready == 1)
            {
                pthread_cond_wait(&cond, &mutex);
            }
        }
        else
        {
            printf("Thread1: %d\n", i);
        }

        pthread_mutex_unlock(&mutex);
    }

    // 告知线程2程序结束
    pthread_mutex_lock(&mutex);
    ready = -1; // 使用-1表示结束
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&mutex);

    return NULL;
}

void *thread2(void *arg)
{
    while (1)
    {
        pthread_mutex_lock(&mutex);

        // 等待线程1发出信号
        while (ready == 0)
        {
            pthread_cond_wait(&cond, &mutex);
        }

        // 检查是否结束
        if (ready == -1)
        {
            pthread_mutex_unlock(&mutex);
            break;
        }

        // 处理当前i值（9的倍数）
        printf("Thread2: %d\n", i);

        // 标记已处理完成
        ready = 0;
        pthread_cond_signal(&cond); // 通知线程1继续

        pthread_mutex_unlock(&mutex);
    }

    return NULL;
}

int main()
{
    pthread_t t_a, t_b;

    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&cond, NULL);

    pthread_create(&t_a, NULL, thread2, NULL);
    pthread_create(&t_b, NULL, thread1, NULL);

    pthread_join(t_b, NULL);
    pthread_join(t_a, NULL);

    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond);

    return 0;
}